package utils

// gcd计算两个整数的最大公约数
func Gcd(a, b int) int {
	for b != 0 {
		t := b
		b = a % b
		a = t
	}
	return a
}

// reduce计算数组arr的最大公约数
func GetArrGcd(arr []int) int {
	g := arr[0]
	for i := 1; i < len(arr); i++ {
		g = Gcd(g, arr[i])
		if g == 1 {
			break
		}
	}
	return g
}

// divideArrayByGCD将数组arr中的每个元素除以其最大公约数
func DivideArrayByGCD(arr []int) []int {
	g := GetArrGcd(arr)
	newArr := make([]int, len(arr))
	for i, v := range arr {
		newArr[i] = v / g
	}
	return newArr
}
